package com.lance.answer.gui.answer.gk.answer;

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lance.answer.gui.answer.AnswerObject;
import com.lance.answer.gui.answer.DealJsonString;
import com.lance.answer.gui.answer.Util;
import com.lance.answer.gui.answer.gk.DealInfoUtil;
import com.lance.answer.gui.answer.gk.answer.task.DoAnswerTaskTMP2022;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingDeque;

@Slf4j
public class DoAnswertmp2022222 {

    public static void main(String[] args) throws Exception {


    //    Thread.sleep(1000*60*60*3);
    //    Thread.sleep(200*60*60*1);

    ///    Thread.sleep(3*60*60*1500);
     //   Thread.sleep(3*60*60*500);

        int sync = 2;
       // String subjectName = "人力资源管理";
    //    String subjectName = "政治学原理";
      //  String subjectName = "计算机应用基础";

        List<String> subjectList = Lists.newArrayList();


  //      subjectList.add("政治学原理");
    //    subjectList.add("国家开放大学学习指南");
      //  subjectList.add("民事诉讼法学");

     //   subjectList.add("管理学基础");
    //    subjectList.add("人力资源管理");
     //   subjectList.add("公共行政学");
      //  subjectList.add("国家开放大学学习指南");

//        subjectList.add("政治学原理");
//        subjectList.add("思想道德与法治");
//        subjectList.add("公共行政学");
//        subjectList.add("形势与政策");
//        subjectList.add("国家开放大学学习指南");
//        subjectList.add("毛泽东思想和中国特色社会主义理论体系概论");
//       // subjectList.add("管理学基础");
//        subjectList.add("人力资源管理");
//        subjectList.add("公共关系学");
//        subjectList.add("公共行政学");
//        subjectList.add("形势与政策");
//        subjectList.add("人力资源管理");
//        subjectList.add("公共关系学");
     //   subjectList.add("劳动与社会保障法");
//                subjectList.add("建设法规");
//        subjectList.add("建筑测量");
//        subjectList.add("建筑施工技术");
//        subjectList.add("建筑工程计量与计价");
//        subjectList.add("人力资源管理");
//        subjectList.add("政治学原理");
//        subjectList.add("管理学基础");
//        subjectList.add("公共行政学");
//        subjectList.add("个人与团队管理");
        subjectList.add("现代企业管理方法");
//        subjectList.add("办公室管理");
  //      subjectList.add("当代世界经济与政治");
       // subjectList.add("习近平新时代中国特色社会主义思想");
     //   subjectList.add("形势与政策");
//        subjectList.add("建筑工程质量检验");
//        subjectList.add("建筑制图基础");


        //      subjectList.add("学前教育学");
       // subjectList.add("幼儿园课程论");
      //  subjectList.add("古代小说戏曲专题");  // https://www.360docs.net/doc/af18234462-3.html
      //  subjectList.add("现代汉语专题");
   //     subjectList.add("中学语文教学研究");
        //   subjectList.add("计算机应用基础(本)");
    //    subjectList.add("教育学");
   //     subjectList.add("中国近现代史纲要");
      //  subjectList.add("中国当代文学专题");
     //      subjectList.add("外国文学基础#");
        //   subjectList.add("形势与政策");
        //   subjectList.add("人体解剖生理学");
    //       subjectList.add("病理学与病理生理学");
       //    subjectList.add("药理学（药）");
        //   subjectList.add("社会心理适应");
        //   subjectList.add("形势与政策");
       //    subjectList.add("中国文学基础#");
        //   subjectList.add("中国现代文学专题");
       //    subjectList.add("古代诗歌散文专题");
        //   subjectList.add("古代诗歌散文专题");
           //    join("中国现代文学专题"); https://wenku.baidu.com/view/cf36962b69ec0975f46527d3240c844768eaa062.html
       // subjectList.add("马克思主义基本原理概论");
      //  subjectList.add("操作系统");
//        subjectList.add("公共行政学");
//        subjectList.add("管理学基础");
//         subjectList.add("计算机应用基础"); //

        LinkedBlockingDeque<AnswerDTO> answerQueue = new LinkedBlockingDeque<>();

        // 获取所有的用户名和密码
        InputStream userInputStream = new FileInputStream("libs//2022User.txt");
        List<String> userString = IOUtils.readLines(userInputStream, "utf-8");
        Map<String, String> usernameAndPwd = Maps.newHashMap();
        for (String user : userString) {
            String[] strs = user.split(",");
            String userCode = strs[0];
            String pwd = strs[1].substring(6, 14);
            pwd = "Ouchn" + pwd;
            usernameAndPwd.put(userCode, pwd);
        }

       for(String subjectName:subjectList){
         //  LinkedList<AnswerRequestDTO> requestUrl = Lists.newLinkedList();
           LinkedList<String> requestUrl = Lists.newLinkedList();
           log.info("subjectName:{}",subjectName);
           InputStream quizInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + subjectName + "-quiz.section");
           List<String> list1 = IOUtils.readLines(quizInputStream,"UTF-8");

           for (String str : list1) {
               requestUrl.add(str.split(",")[0]);
           }
           InputStream answerInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + subjectName + "-answer.json");
           String answerStr = IOUtils.toString(answerInputStream,"UTF-8");
           List<AnswerObject> list = JSONObject.parseArray(answerStr, AnswerObject.class);
           Map<String, AnswerObject> answers = new HashMap<>();
           Map<String, AnswerObject> originAnswers = new HashMap<>();
           for (AnswerObject answerObject : list) {
               answers.put(answerObject.getQuestionCode(), answerObject);
               originAnswers.put(DealJsonString.saveZhWord(answerObject.getQuestionTitle()),answerObject);
           }

           List<String> userNames = DealInfoUtil.countUserCourseInfo("libs//userCourseInfo").get(subjectName);

           for(String username:userNames){
            //   if(!"2136001453127".equals(username)){
               if(
                       !"2137001425132".equals(username)
                       &&!"2137001425134".equals(username)
               ){
                   continue;
               }
//                              if(!Util.getVip().contains(username)){
//                   continue;
//               }
//               if(subjectName.equals("病理学与病理生理学")){
//                   continue;
//               }
               String pwd = usernameAndPwd.get(username);
               AnswerDTO answerDTO = new AnswerDTO();
               answerDTO.setSubjectName(subjectName);
               answerDTO.setUsername(username);
               answerDTO.setPwd(pwd);
               answerDTO.setAnswers(answers);
               answerDTO.setOriginAnswers(originAnswers);
               answerDTO.setCommit(true);
               answerDTO.setPush(false);
               answerDTO.setAnswerUrl(requestUrl);
               answerQueue.add(answerDTO);
           }

       }

        for (int i = 1; i <= sync; i++) {
            Thread answerThread = new DoAnswerTaskTMP2022(null,answerQueue);
            //log.info("加载课程ID：{} 名称：{} ", openCourseId,subjectName);
            answerThread.setName( "答题线程--" + i);
            answerThread.start();
        }


    }




}
